1. Technical Field
The present invention relates generally to an improved data processing system and in particular to a method and apparatus for processing data. Still more particularly, the present invention provides a method and apparatus for transferring data on a bus between master and slave components.
2. Description of Related Art
A bus is a common pathway, or channel, between multiple devices. The computer's internal bus is known as the local bus, or processor bus. This type of bus provides a parallel data transfer path between the CPU and main memory and to the peripheral buses. A 16-bit bus transfers two bytes at a time over 16 wires; a 32-bit bus uses 32 wires, etc. The bus is comprised of two parts: the address bus and the data bus. Addresses are sent over the address bus to signal a memory location, and the data is transferred over the data bus to that location.
Various other types of buses are used in data processing systems. In particular, an inter internal control (IIC) bus is an example of another type of bus used in a data processing system. An IICU bus, also referred to as an I2C bus, was developed by Koninklijke Philips Electronics NV, also known as Philips Semiconductors. Details and specifications on the protocols for this bus are found in The I2C-Bus Specification, Version 2.1, January 2000. In this bus, one wire carries a clock signal, while another wire carries the data signal. This type of bus is used to provide interconnection between various devices, such as a flexible service processor, a memory, and a control panel. A flexible service processor is a processing unit that is used to initialize a data processing system. A flexible service processor has its own boot code and operating system and may be connected to a number of I/O devices.
Devices connected to an IIC bus may operate in a master or slave mode. In a master read/write mode, the device may initiate a data transfer. When a device is in a slave read/write mode, the device simply waits for data coming over the IIC bus. On a flexible service processor, a device driver is employed by the flexible service processor to handle data transfers with the bus. An application executing on a flexible service processor may make a call to the device driver indicating that the flexible service processor needs to respond as a slave to some event triggered by an external master. An external master is a master device located external to the flexible service processor. An example of an external master device is a control panel, which may send identifying button pushes on the panel, to the flexible service processor. Another example of an external master device is a rack power controller, which may send data, such as power transition or heartbeat command data to the flexible service processor.
More than one master, external to the flexible service processor, may target a “slave” in the flexible service processor. With this situation, more than one event may be issued by different external devices at the same time. Further, more than one process or application executing on the flexible service processor may be waiting for data on the same bus. When a flexible service processor operates as a slave device, it is only able to listen for data on a single slave address for a particular IIC bus. ITC buses have no intelligence regarding the identity of the master triggering the event. As a result, the bus is unable to associate data, put on data lines, with the process waiting for the data.
With this set-up, only one slave transfer request is currently possible for a device driver on a flexible service processor. If data for events are issued by different master devices, data can be lost if the flexible service processor is not continuously set up to receive any data that might be put onto the bus. For example, two applications may be executing on a flexible service processor in which one application monitors for button pushes on a control panel, while the other application monitors for temperature data from a power device, such as a rack power controller. If both the control panel and the rack power controller send data, as master devices, on the bus at the same time, the data is directed towards the flexible service processor as the slave device. This data can be received by only one of the applications because the current architecture only allows the device driver for the flexible service processor to handle only one slave request at a time. In this example, both applications cannot issue slave requests that can be handled by the device driver. As a result, a loss of information may occur.
Therefore, it would be advantageous to have an improved method, apparatus, and computer instructions for handling data transfers between external master devices and internal requests for slave transfers.